class_name TileHighlighter
extends Node
## 功能：TileMapLayer 高亮瓦片。
## 使用：挂载到 Node 节点上，配置导出变量。

## 是否禁用瓦片高亮功能
@export var active: bool = false :
	set(value):
		active = value
		if not active:
			_cell_coords.resize(0)
			highlight_layer.clear()

## 高亮层，即将高亮瓦片绘制到该层上
@export var highlight_layer: TileMapLayer

## 高亮瓦片在 TileSet 中的坐标
@export var highlight_tile_coord: Vector2i

## 需要被高光的瓦片坐标
var _cell_coords: Array[Vector2i]


func _process(_delta: float) -> void:
	if active:
		_update_tiles()


## 高亮指定世界全局坐标的瓦片
func highlight_tile_by_global_position(world_global_position: Vector2) -> void:
	highlight_tile_by_cell_coord(highlight_layer.local_to_map(world_global_position))


## 高亮指定网格局部坐标的瓦片
func highlight_tile_by_cell_coord(coord: Vector2i) -> void:
	if not _cell_coords.has(coord):
		_cell_coords.append(coord)


## 清除所有高亮瓦片
func clear_highlighted_tiles() -> void:
	_cell_coords.resize(0)


func _update_tiles() -> void:
	highlight_layer.clear()
	
	var source_id = highlight_layer.tile_set.get_source_id(0)
	for cell_position: Vector2i in _cell_coords:
		highlight_layer.set_cell(cell_position, source_id, highlight_tile_coord)
	
	_cell_coords.resize(0)
